import base64
import io
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import pytesseract

from util import util
from util import yunma

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
from PIL import Image


def test1():
    randomStr=util.gen_random_str()
    print('执行test_1:'+randomStr)

# 验证码识别 
# 对验证码图片的处理是采用：截图加裁剪的方式
# 不能直接去下载src中的连接，因为你打开后，会得到一个新的验证码图片。所以只有通过截图的方式来处理
def test2():
    browser = webdriver.Chrome()
    browser.get('https://pro.hogtoto.com/login')
    browser.maximize_window()
    browser.save_screenshot('screenshot.png')

    #定位验证码图片的位置
    element = browser.find_element(By.XPATH,'//img[@alt="验证码"]')
    left=element.location['x']
    top=element.location['y']
    right=left+element.size['width']
    height=top+element.size['height']

    #获取分辨率比率，这一步很关键，因为屏幕分辨的原因，没有它的会截取不到验证码图片
    dpr=browser.execute_script('return window.devicePixelRatio')
    print('dpr:'+str(dpr))

    #截取验证码图片
    im=Image.open('screenshot.png')
    img=im.crop((left*dpr,top*dpr,right*dpr,height*dpr))

    base64Str=imgToBase64(img)

    #AI识别验证码
    code=util.get_verification_code(base64Str)
    print('验证码识别结果：'+code)
    inputCaptcha=browser.find_element(By.XPATH,'//input[@name="captcha"]')
    inputCaptcha.send_keys(code)
    sleep(15)

#对验证码图片的处理是采用：直接获取src中的base64字符串
def test3():
    browser = webdriver.Chrome()
    browser.get('https://www.crcf.org.cn/web/login.thtml')
    browser.maximize_window()

    element = browser.find_element(By.XPATH,'//img[@class="get-code"]')
    # 获取验证码的base64字符串
    base64Str = element.get_attribute('src')
    #调用第三方API识别验证码
    code=util.get_verification_code(base64Str)
    print("验证码识别结果："+code)
    sleep(3)
    #填写验证码
    browser.find_element(By.XPATH,'//input[@name="captcha"]').send_keys(code)
    sleep(10)

#测试云码识别验证码的功能
def test4():
    util.get_verification_code('')

#将img对象转成base64字符串
def imgToBase64(img):
    buffer = io.BytesIO()
    img.save(buffer, format='PNG')
    img_data = buffer.getvalue()
    base64Str=base64.b64encode(img_data).decode()
    return base64Str    
